/**
 * @description 用户 Model Mongodb
 */
const { format } = require('date-fns')
const mongoose = require('../db/mongoose')

const UserSchema = new mongoose.Schema(
  {
    id: Number,
    username: { type: String, unique: true, required: true },
    password: { type: String, select: false }, // select:false 设置该字段在查询的时候不显示
    nickName: { type: String },
    picture: { type: String },
    phoneNumber: { type: String },
    type: { type: String, default: 'username' }, // 'username' | 'cellphone' | 'oauth' 账户类型（username，手机，oauth）
    provider: { type: String }, // oauth 提供方 gitlab，weixin
    oauthID: { type: String }, // oauth 提供方的唯一标识符
    latestLoginAt: { type: Date, default: null, get: d => format(d, 'yyyy-MM-dd HH:mm') }, // 最后登录时间
    isFrozen: { type: Boolean, default: false }, // 用户是否冻结
    role: { type: String, default: 'normal' }, // 角色 'admin' | 'normal'
    createdAt: { type: Date, default: null, get: d => format(d, 'yyyy-MM-dd HH:mm') } // 默认时间标准时间，在查询的时候格式成+8小时的本地时间
  },
  {
    timestamps: { createdAt: 'createdAt' },
    toJSON: {
      getters: true,
      transform(doc, ret) {
        delete ret.__v
      }
    }
  }
)

const UserModel = mongoose.model('User', UserSchema)

module.exports = UserModel
